package com.zmn.plat.business.interfaces.pilot;

import com.zmn.mcc.cas.model.LoginStaff;
import com.zmn.plat.common.dto.pilot.PilotEarnesPriceDRO;
import com.zmn.plat.model.entity.pilot.ChannelPriceVO;
import com.zmn.plat.model.entity.pilot.SupportPilotVO;

import java.util.List;
import java.util.Map;

/**
 * 描述: 渠道试点复杂业务接口类
 *
 * @author guoqiao
 * @since 2021-06-25 10:16:42
 */
public interface ChannelPriceBService {

    /**
     * 描述: 根据渠道、城市、类型、品类获取支持试点的定金（有则返回）、支付方式（线上支付时返回）、分类列表
     *
     * <p>
     * 执行逻辑：
     * 优先查询渠道试点层面，如无数据，则查询城市试点层面
     * 1.渠道试点层面：查询渠道试点配置，查询城市是否在不执行城市中，再查询执行城市中
     * 2.城市试点层面：查询城市试点配置，查询开通分类
     *
     * @param channelId 渠道id
     * @param cityId    城市id
     * @param type      类型：1线上支付，2计价器（故障维度），3三日退试点，4优惠限制，5 维修机器人
     * @param servCategId 前台产品-服务分类ID
     * @param categId     前台产品-二级产品分类ID
     * @return java.util.List<com.zmn.plat.model.entity.oneprice.SupportTariffCategoryVO>
     * @author guoqiao
     * @since 2021/6/25 15:52
     */
    SupportPilotVO listPilotCategs(Integer channelId, Integer cityId, Integer type, Integer servCategId, Integer categId);

    /**
     * 描述: 根据渠道、城市、类型、查询是否支持试点(未配置)
     *      渠道试点：渠道指定的类型下 未开通分类以及城市
     *      城市试点：城市表中再指定的下，未开通任何城市
     * @version v1.0
     * @param channelId
     * @param cityId
     * @param type
     * @return java.lang.Boolean
     * @author jiafei
     * @modifier
     * @since 2021/9/23 11:13
     */
    Boolean listPilotOpen(Integer channelId, Integer cityId, Integer type);

    /**
     * 描述: 根据渠道、城市、类型、品类校验是否支持试点
     *
     * <p>
     * 执行逻辑：先查询支持试点的分类列表，包含了入参品类，则返回true，反之返回false
     *
     * @param channelId 渠道id
     * @param cityId    城市id
     * @param type      类型：1线上支付，2计价器（故障维度），3三日退试点，4优惠限制，5 维修机器人
     * @param servCategId 前台产品-服务分类ID
     * @param categId     前台产品-二级产品分类ID
     * @return java.lang.Boolean
     * @author guoqiao
     * @since 2021/6/25 15:52
     */
    Boolean checkByChannelIdAndCityIdAndTypeAndCateg(Integer channelId, Integer cityId, Integer type, Integer servCategId, Integer categId);

    /**
     * 描述: 根据渠道、城市、类型、产品校验是否支持计价器
     *
     * <p>
     * 执行逻辑：先查询支持试点的分类列表，不包含入参品类，则返回false；包含了，还需校验产品是否满足计价器的条件
     *
     * @param channelId     渠道id
     * @param cityId        城市id
     * @param type          类型：2计价器（故障维度）
     * @param productId     后台产品ID（可传，如传入则校验后台产品支持计价器。不传则校验前台产品对应至少一项后台产品支持计价器）
     * @param showProductId 前台产品ID（必传）
     * @return java.lang.Boolean
     * @author guoqiao
     * @since 2021/6/28 18:15
     */
    Boolean checkByChannelIdAndCityIdAndTypeAndProductId(Integer channelId, Integer cityId, Integer type, Integer productId, Integer showProductId);

    /**
     * 描述: 根据渠道、城市、产品校验是否支持计价器或预计价
     * <p>计价器试点 and 预计价试点 and（计价器价格表 or 提前付价格表））</>
     *
     * @param channelId     渠道id
     * @param cityId        城市id
     * @param showProductIdList 前台产品ID集合（必传）
     * @return java.lang.Boolean
     * @author guoqiao
     * @since 2021/6/28 18:15
     */
    Map<Integer, Boolean> checkTariffAndAdvance(Integer channelId, Integer cityId, List<Integer> showProductIdList);

    /**
     * 根据渠道、产品、前台产品id集合查询定金
     *
     * @param channelId   the channel id
     * @param cityId      the city id
     * @param showProductIdList 前台产品ID集合
     * @return ResponseDTO<List<PilotEarnesPriceDRO>>
     * @author guoqiao
     * @since 2021/6/28 18:15
     */
    List<PilotEarnesPriceDRO> listPilotEarnesPrice(Integer channelId, Integer cityId, List<Integer> showProductIdList);

    /**
     * 根据渠道保存渠道试点配置
     *
     * @param item
     * @param mcStaff
     * @return java.lang.Integer
     * @author yangshuangping
     * @since 2021-6-28 09:40:20
     */
    Integer submitOnePrice(ChannelPriceVO item, LoginStaff mcStaff);
}

